from pydantic_settings import BaseSettings
from pathlib import Path

class Settings(BaseSettings):
    # InternVL API配置（保留作为备用）
    INTERNVL_API_KEY: str = ""  # 设为可选，避免启动失败
    INTERNVL_BASE_URL: str = "https://internlm-chat.intern-ai.org.cn/puyu/api/v1"
    INTERNVL_MODEL_NAME: str = "internvl2-pro"
    
    # Qwen3-VL API配置（主要使用）
    QWEN_API_URL: str = "http://192.168.200.19:18009/api/generate"
    QWEN_MODEL_NAME: str = "Qwen3-VL"
    QWEN_TIMEOUT: int = 300  # Qwen3-VL超时时间（秒）
    QWEN_MAX_VIDEO_SIZE_MB: int = 50  # 最大视频大小（MB）

    # 文本生成配置（用于“分段提示词模板/汇总提示词”的生成）。
    # 取值："qwen" | "internvl" | "openai"（或其他OpenAI兼容服务）。为空则使用 qwen。
    PROMPT_TEXT_PROVIDER: str = ""  # 默认空=沿用 qwen

    # 通用文本LLM（OpenAI兼容）配置，仅当 PROMPT_TEXT_PROVIDER = "openai" 时生效
    TEXT_LLM_BASE_URL: str = ""       # 例如: https://api.openai.com 或 自建兼容网关地址
    TEXT_LLM_API_KEY: str = ""        # Bearer 密钥
    TEXT_LLM_MODEL: str = "gpt-4o-mini"  # 兼容 /v1/chat/completions 的模型名
    TEXT_LLM_TIMEOUT: int = 120        # 超时时间（秒）
    
    # 应用配置
    APP_HOST: str = "0.0.0.0"
    APP_PORT: int = 8000
    DEBUG: bool = True
    
    # 文件配置
    UPLOAD_DIR: str = "./uploads"
    MAX_FILE_SIZE: int = 52428800  # 50MB
    ALLOWED_EXTENSIONS: str = "mp4,avi,mov,mkv"
    
    # 视频服务配置
    VIDEO_HOST: str = "192.168.210.72"  # 视频服务主机IP，可通过环境变量配置
    VIDEO_PORT: int = 8000  # 视频服务端口，可通过环境变量配置
    KEEP_UPLOADED_FILES: bool = True  # 是否保留上传的文件
    
    @property
    def VIDEO_BASE_URL(self) -> str:
        """动态生成视频访问基础URL"""
        return f"http://{self.VIDEO_HOST}:{self.VIDEO_PORT}"
    
    # 日志配置
    LOG_LEVEL: str = "INFO"
    LOG_FILE: str = "./logs/app.log"
    
    class Config:
        env_file = ".env"
        env_file_encoding = "utf-8"

# 创建全局设置实例
settings = Settings()

# 确保必要目录存在
Path(settings.UPLOAD_DIR).mkdir(exist_ok=True)
Path("logs").mkdir(exist_ok=True)
Path("reports").mkdir(exist_ok=True)
Path("static").mkdir(exist_ok=True)